package com.company.genealogy.web.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;

/**
 * 家族成员实体类
 * 
 * 表示家族中的一个成员，包含成员的基本信息、家族关系、地理位置等。
 * 支持族谱树形结构的构建和成员关系的维护。
 * 
 * 主要信息：
 * - 基本信息：姓名、性别、出生日期、去世日期
 * - 家族关系：家族ID、分支ID、父母ID、世代信息
 * - 地理位置：籍贯、现住地址
 * - 个人资料：照片、个人事迹、联系方式
 * - 系统信息：创建时间、更新时间、状态等
 * 
 * 扩展字段：
 * - 用于展示的关联信息（家族名称、分支名称、父母姓名等）
 * - 这些字段不存储在数据库中，仅用于前端展示
 * 
 * @author chenzhixiang
 * @version 1.0
 * @since 2024-01-01
 */
@Data
@TableName("tb_member")
public class Member {
    
    /**
     * 成员ID，主键，自增
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    
    /**
     * 家族ID，关联家族表
     */
    private Long clanId;
    
    /**
     * 分支ID，关联分支表
     */
    private Long branchId;
    
    /**
     * 成员姓名
     */
    private String name;
    
    /**
     * 性别：M-男，F-女
     */
    private String gender;
    
    /**
     * 头像图片路径
     */
    private String avatar;
    
    /**
     * 出生日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthDate;
    
    /**
     * 去世日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date deathDate;
    
    /**
     * 个人事迹或简介
     */
    private String story;
    
    /**
     * 父亲ID，关联成员表
     */
    private Long fatherId;
    
    /**
     * 母亲ID，关联成员表
     */
    private Long motherId;
    
    /**
     * 世代号，表示在族谱中的世代
     */
    private Integer generation;
    
    /**
     * 族谱路径，记录从根节点到当前节点的完整路径
     */
    private String lineagePath;
    
    /**
     * 照片路径
     */
    private String photo;
    
    /**
     * OCR识别内容，用于照片中的文字识别
     */
    private String ocrContent;
    
    /**
     * 联系方式
     */
    private String contact;
    
    /**
     * 籍贯，完整地址描述
     */
    private String nativePlace;
    
    /**
     * 籍贯省份编码
     */
    private String nativeProvinceCode;
    
    /**
     * 籍贯城市编码
     */
    private String nativeCityCode;
    
    /**
     * 籍贯区县编码
     */
    private String nativeCountyCode;
    
    /**
     * 籍贯镇/街道编码
     */
    private String nativeTownCode;
    
    /**
     * 现住地址
     */
    private String currentAddress;
    
    /**
     * 排序号，用于族谱树中的显示顺序
     */
    private Integer sortOrder;
    
    /**
     * 同父母下子女排序，1为长子/长女
     */
    private Integer childOrder;
    
    /**
     * 状态：1-在世，0-去世
     */
    private Integer status;
    
    /**
     * 审批状态：pending-待审批，approved-已通过，rejected-已拒绝
     */
    private String approvalStatus;
    
    /**
     * 提交人ID，关联用户表
     */
    private Long submitterId;
    
    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createdAt;
    
    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updatedAt;

    /**
     * 家族名称（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String clanName;
    
    /**
     * 分支名称（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String branchName;
    
    /**
     * 父亲姓名（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String fatherName;
    
    /**
     * 母亲姓名（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String motherName;
    
    /**
     * 配偶姓名（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String spouseName;
    
    /**
     * 籍贯省份名称（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String nativeProvinceName;
    
    /**
     * 籍贯城市名称（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String nativeCityName;
    
    /**
     * 籍贯区县名称（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String nativeCountyName;
    
    /**
     * 籍贯镇/街道名称（扩展字段，不存储在数据库中）
     */
    @TableField(exist = false)
    private String nativeTownName;
} 